package dao.impl;

import dao.EstadiaDAO;
import excecao.ObjetoDuplicadoException;
import excecao.ObjetoNaoEncontradoException;
import java.util.ArrayList;
import java.util.List;
import modelo.Estadia;
import modelo.Quarto;
import modelo.Residente;

public class MemoryEstadiaDAO implements EstadiaDAO {

    // Banco
    private ArrayList<Estadia> lista;
    private long seq;

    public MemoryEstadiaDAO() {
        lista = new ArrayList<Estadia>();
        seq = 0;
    }

    public void inclui(Estadia umaEstadia) throws ObjetoDuplicadoException {

        for (Estadia estadia : lista) {
            if (estadia.igual(umaEstadia)) {
                throw new ObjetoDuplicadoException();
            }
        }
        
        umaEstadia.setId(++seq);
        lista.add(umaEstadia);
    }

    public void altera(Estadia umaEstadia) throws ObjetoNaoEncontradoException {	// o Altera Estadia mas n�o altera os itens do carrinho
        boolean achou = false;

        for (Estadia estadia : lista) {
            if (estadia.igual(umaEstadia)) {
                umaEstadia.setId(estadia.getId());
                lista.remove(estadia);
                lista.add(umaEstadia);
                achou = true;
                break;
            }
        }

        if (!achou) {
            throw new ObjetoNaoEncontradoException();
        }

    }

    public void exclui(Estadia umaEstadia) throws ObjetoNaoEncontradoException {

        if (!lista.remove(umaEstadia)) {
            throw new ObjetoNaoEncontradoException();
        }

    }

    public Estadia recuperaUmaEstadia(Estadia umaEstadia)
            throws ObjetoNaoEncontradoException {

        for (Estadia estadia : lista) {
            if (estadia.igual(umaEstadia)) {
                return estadia;
            }
        }


        throw new ObjetoNaoEncontradoException();
    }

    public List<Estadia> recuperaEstadias() {

        return lista;

    }

    public Estadia recuperaEstadiaCorrentePorResidente(Residente residente) {

        Estadia estadia = null;
        for (Estadia estadiaAux : lista) {
            if (estadiaAux.getResidente().igual(residente) && (estadiaAux.getDataEncerramento() == null) ) {
                estadia = estadiaAux;
            }
        }
        if (estadia == null) {
            return null;
        }
        return estadia;

    }

    
    public Estadia recuperaEstadiaPorQuarto(Quarto quarto) {

        Estadia estadia = null;
        for (Estadia estadiaAux : lista) {
            if (estadiaAux.getQuarto().igual(quarto)) {
                estadia = estadiaAux;
            }
        }
        if (estadia == null) {
            return null;
        }
        return estadia;

    }
}
